package cn.chengpengper.seckill.stock.domain.repository;

import cn.chengpengper.seckill.stock.domain.model.entity.SeckillStockBucket;

import java.util.List;

/**
 * @author chengpeng.hu
 */
public interface SeckillStockBucketRepository {

    /**
     * 批量提交商品库存信息
     *
     * @param goodsId 商品ID
     * @param buckets 库存分桶列表
     * @return 是否提交成功
     */
    boolean submitBuckets(Long goodsId, List<SeckillStockBucket> buckets);

    /**
     * 增加库存
     *
     * @param quantity 增加数量
     * @param serialNo 库存编号
     * @param goodsId  商品ID
     * @return 是否增加成功
     */
    boolean increaseStock(Integer quantity, Integer serialNo, Long goodsId);

    /**
     * 扣减库存
     *
     * @param quantity 扣减数量
     * @param serialNo 库存编号
     * @param goodsId  商品ID
     * @return 是否扣减成功
     */
    boolean decreaseStock(Integer quantity, Integer serialNo, Long goodsId);

    /**
     * 根据商品ID获取库存分桶列表
     *
     * @param goodsId 商品ID
     * @return 分桶列表
     */
    List<SeckillStockBucket> getBucketsByGoodsId(Long goodsId);

    /**
     * @param goodsId 商品ID
     * @return
     */
    boolean suspendBuckets(Long goodsId);

    /**
     * 恢复库存
     *
     * @param goodsId 商品ID
     * @return 是否恢复成功
     */
    boolean resumeBuckets(Long goodsId);
}
